/*** 本文件由HaivDb4J2ee工具辅助生成，版本1.3.1 ***/

package com.ce.sys.dict.action;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import net.sf.json.JSONArray;

import org.omg.CORBA.portable.ApplicationException;

import com.ce.framework.datamaintain.action.DataMaintainAction;
import com.ce.framework.datamaintain.logic.ISearchCondition;
import com.ce.framework.exception.AppException;
import com.ce.framework.util.BeanAccessUtil;
import com.ce.framework.util.LogUtil;
import com.ce.framework.util.StringUtil;
import com.ce.framework.util.node.JsonTreeNode;
import com.ce.sys.dict.dao.po.SysDictItem;
import com.ce.sys.dict.dao.po.SysDictM;
import com.ce.sys.dict.logic.search.SysDictMSearchCondition;
import com.ce.util.DbUtil;
import com.ce.util.DictUtil;

/**
* 嫦娥软件有限公司 版权所有 2013
* 创建人：　andy
* 创建日期：2010-09-14
* 创建时间：09:47:42
* 功能描述：字典主表 [SYS_T_DICT$M]更改时用的Action
* ==============================================
* 修改历史
* 修改人		修改时间		修改原因
*
* ==============================================
*/
public class SysDictMAction extends DataMaintainAction
{
	private static final long serialVersionUID = 1L;
	private String names;
    protected ISearchCondition creatMainPoCondition() throws AppException {
      // TODO Auto-generated method stub
      SysDictMSearchCondition condition = new SysDictMSearchCondition();	
      BeanAccessUtil.copyBeanProperties(condition,this);	
      /*
       * 使用js框架分页时进行后台排序的两个必要属性：
       * order - 排序类型，值为asc，desc
       * sort  - 排序字段，值为js表格中的field属性。一般和view类中的属性想对应
       */
      condition.setOrder(getParameter("order"));
      condition.setSort(getParameter("sort"));
      return condition;
	}
    
    @Override
	protected String openAddPage() throws AppException {
		// TODO Auto-generated method stub
    	int seq = this.baselogic.getCntByHQL("from SysDictM po where po.vcDelFlag = 0");
    	try{
    		BeanAccessUtil.copyProperty(this.po, "nseq", seq);	
    	}catch(Exception e){
    		LogUtil.logError("获取字典项排序号错误！", e);
    		e.printStackTrace();
    	}
    	
		return super.openAddPage();
	}
    
    @Override
	public String execute() throws Exception {
    	if(StringUtil.isBlank(op))
    	    return "dictTreeFrame";
    	else if("reportdate".equals(op))
    	    return reportDateSet();
    	else
    		return super.execute();
	}

    private String reportDateSet(){
    	String dictName = getParameter("dictName");
    	String begin = getParameter("begin");
    	String end = getParameter("end");
    	if(StringUtil.isBlank(dictName)){
    		return this.writeHTML("未指定字典项名称！");
    	}
    	setAttribute("dictName", dictName);
    	dictName = "统计报表起止日期设置_"+dictName;
    	if(StringUtil.isNotBlank(begin)&&StringUtil.isNotBlank(end)){//保存设置
    		if(DbUtil.getFirstIntSqlQuery("select count(*) from sys_t_dict$m where vc_del$flag=0 and vc_name=?", new Object[]{dictName})==0){
    			DbUtil.executeSqlUpdate("insert into sys_t_dict$m(vc_id,vc_name,n_seq,dt_create,vc_del$flag) " +
    					"values(sys_guid(),?,10001,sysdate,0)",new Object[]{dictName});
    		}
    		String vcMid = DbUtil.getFirstStringSqlQuery("select vc_id from sys_t_dict$m where vc_del$flag=0 and vc_name=? order by vc_id",new Object[]{dictName});
    		DbUtil.executeSqlUpdate("delete from sys_t_dict$item where vc_m$id=?",new Object[]{vcMid});
    		DbUtil.executeSqlUpdate("insert into sys_t_dict$item(vc_id,vc_m$id,vc_item$number,vc_item$name,n_seq,dt_create,vc_del$flag) " +
					"values(?,?,?,?,1,sysdate,0)",new Object[]{vcMid+"_1",vcMid,"开始日期",begin});
    		DbUtil.executeSqlUpdate("insert into sys_t_dict$item(vc_id,vc_m$id,vc_item$number,vc_item$name,n_seq,dt_create,vc_del$flag) " +
					"values(?,?,?,?,2,sysdate,0)",new Object[]{vcMid+"_2",vcMid,"结束日期",end});
    	}
    	try {
			SysDictItem beginItem = DictUtil.getDictItemByValueAndDictName("开始日期", dictName);
			SysDictItem endItem = DictUtil.getDictItemByValueAndDictName("结束日期", dictName);
			if(beginItem!=null&&endItem!=null){
				setAttribute("begin", beginItem.getVcItemName());
				setAttribute("end", endItem.getVcItemName());
			}
		} catch (AppException e) {
			LogUtil.logError(e);
		}
    	return "reportdate";
    }

	/**
     * 开发人： andy
     * 开发时间： 2013-10-21 下午02:11:10
     * 功能描述：打开字典管理的界面
     * 方法的参数和返回值
     * @return
     * String 
     * ==================================
     * 修改历史
     * 修改人        修改时间      修改原因及内容
     *
     * ==================================
     */
    public String openTreeFrame(){
    	return "dictTreeFrame";
    }
	
    /**
     * 开发人： andy
     * 开发时间： 2013-9-14 下午03:12:50
     * 功能描述： 打开字典表的操作界面
     * 方法的参数和返回值
     * @return
     * @throws AppException
     * String 
     * ==================================
     * 修改历史
     * 修改人        修改时间      修改原因及内容
     *
     * ==================================
     */
    public String openDictTree()throws AppException{
    	try{
        	List<?> list =  this.baselogic.searchByHql("from SysDictM po where po.vcDelFlag=0 order by po.vcName asc,po.nseq , po.dtCreate desc");
        	setAttribute("dictList", list);    		
    	}catch(Exception e){
    		throw new AppException("未获取到字典表数据");
    	}
    	return "openDictTree";
    }

	public String getNames() {
		return names;
	}

	public void setNames(String names) {
		this.names = names;
	}
	
	
    /**
     * 开发人： andy
     * 开发时间： 2013-9-16 下午04:12:49
     * 功能描述：生成Json格式的字典树
     * 方法的参数和返回值
     * @return
     * @throws ApplicationException
     * @throws AppException
     * String 
     * ==================================
     * 修改历史
     * 修改人        修改时间      修改原因及内容
     *
     * ==================================
     */
    public void searchDictJsonTree()throws  ApplicationException,AppException{
    	JSONArray jsonTree = new JSONArray();
    	
    	//获取字典主表
    	String baseHql = "from SysDictM po where po.vcDelFlag=0 order by po.vcName,po.nseq asc,po.dtCreate desc";  //获取机构树的基本sql语句
        List<?> dictList = this.baselogic.searchByHql(baseHql);//字典项集合
    	List<JsonTreeNode> childList = new ArrayList<JsonTreeNode>();   //字典树节点List
    	Iterator<?> it = dictList.iterator();
    	while(it.hasNext()){
    		JsonTreeNode child = new JsonTreeNode();  //字典树子节点
    		SysDictM dict = (SysDictM)it.next();
    		child.setId(dict.getVcId());
    		child.setText(dict.getVcName());
    		childList.add(child);
    	}
    	//设置树的根节点的信息
    	JsonTreeNode rootNode = new JsonTreeNode();//根节点
    	rootNode.setText("公共字典表");
    	rootNode.setChildren(childList); //加载子节点
    	jsonTree.add(rootNode);  //写入树节点信息
    	//以字符串为文件流进行输出
    	writeHTML(jsonTree.toString());
    }


}

